<?php
/* 
* [生成静态]
* @Author: 			   Recall                 
* @Date:   			   2014-06-25 23:35:26        
* @Last Modified time: 2014-06-29 15:00:18
*/
	class HtmlControl extends CommonControl{
		/**
		 * [index 生成首页静态]
		 * @return [type] [description]
		 */
		public function index(){
			//执行生成静态方法
			if($this -> _create_html('Index/index',ROOT_PATH . 'index.html')){
				//成功
				$this -> success('生成首页静态成功',U('Admin/Index/welcome'));
			}
				//失败
				$this -> error('生成首页静态失败',U('Admin/Index/welcome'));
		}

		/**
		 * [list_ 生成列表页静态]
		 * @return [type] [description]
		 */
		public function list_(){
			//获得分类数据
			$cate = K('Category') -> all();
			//循环分类数据
			foreach ($cate as $v) {
				//如果不是生成静态 略过
				if(!$v['is_listhtml']) continue;
				//将cid page压入GET中
				$_GET['cid'] = $v['cid'];
				$_GET['page'] = 1;
				//生成静态 判断是否生成失败
				if (!$this->_create_html('List/index',STATIC_PATH . $v['htmldir'] . '/index.html')) {
					header('Content-type:text/html;charset=utf-8');
					die('生成列表页静态失败');
				}
				//循环生成分页静态
				for ($i=1; $i <= Page::$staticTotalPage; $i++) {
					//将page压入GET中 
					$_GET['page'] = $i;
					$this->_create_html('List/index',STATIC_PATH . $v['htmldir'] . '/index_' . $i .'.html');
				}
			}
			//生成成功
			$this -> success('生成列表页静态成功',U('Admin/Index/welcome'));
		}

		/**
		 * [arc_ 生成文章页静态]
		 * @return [type] [description]
		 */
		public function arc_(){
			//执行关联表模型
			$model = K('ArticleCateView');
			//统计总数
			$total = $model -> get_join_count('category');
			//实例化分页类
			$pageObj = new Page($total,5);

			//得出文章与栏目关联信息  1.关联的表名  2.所取字段  3.分页
			$data = K('ArticleCateView') -> get_join_data('category','aid,is_archtml,htmldir',$pageObj -> limit());
			//循环数据
			foreach ($data as $v) {
				//如果不是生成静态 略过
				if(!$v['is_archtml']) continue;
				//将aid压入GET中
				$_GET['aid'] = $v['aid'];
				//执行生成静态方法
				if(!$this -> _create_html('Arc/index',STATIC_PATH . $v['htmldir'] . '/arc/' . $v['aid'] . '.html')){
					//生成失败
					header('Content-type:text/html;charset=utf-8');
					die('生成文章页静态失败');
				}
			}

			//判断是否到了最后一页
			if ($pageObj -> selfPage == $pageObj -> totalPage) {
				//如果到了最后一页 生成静态文章完成
				$this -> success('生成内容页完成',U('Admin/Index/welcome'));
			}else{
				//跳转到当前方法 当前页+1
				$this -> success('生成第' . $pageObj -> selfPage . '页完成',U('arc_',array('page'=>$pageObj -> selfPage+1)));
			}
		}

		/**
		 * [_create_html 生成静态方法]
		 * @param  [type] $CM    [控制器、方法]
		 * @param  [type] $field [目录]
		 * @return [type]        [description]
		 */
		public function _create_html($CM,$field){
			//开启缓存区
			ob_start();
			//执行前台首页方法
			A('Index/' . $CM);
			//储存缓冲区中的内容
			$content = ob_get_contents();
			//关闭缓冲区
			ob_clean();
			//获得路径
			$dir = dirname($field);
			//创建目录
			is_dir($dir) || mkdir($dir,0777,true);
			//写成静态文件
			if(file_put_contents($field, $content)){
				return true;
			}else{
				return false;
			}
		}
	}
?>
